﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using System.IO;
using System.Reflection;
using UtilityExtensions;
using DAL;
using BOL;
using System.Data.Linq;
using System.Linq;

namespace UILGestion.Control
{
    public partial class menuCtrl : System.Web.UI.UserControl
    {



        protected void Page_Load(object sender, EventArgs e)
        {
            
        }

        public void loadMenuVenta(int idProyecto)
        {
            var q = from a in DbUtil.Db.Menus
                    where a.idAplicacion == 5
                    & a.habilitado==true
                    select a;

            // mostramos solo el menu al cual tiene acceso
                
            foreach (var item in q)
            {

                //esta condicion indica q son elementos padre.

                if (item.idInternal.Equals(item.idpadre))
                {

                    MenuItem mnuItem = new MenuItem();
                    mnuItem.Value = item.idInternal.ToString();
                    mnuItem.Text = item.descripcion;
                    mnuItem.ImageUrl = item.icono;
                    mnuItem.NavigateUrl = item.url + "?idProyecto={0}".Fmt(idProyecto.ToString());
                    // 'agregamos el Ítem al menú
                    opcionesMenu.Items.Add(mnuItem);
                    //'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.

                    AddMenuItemVenta(mnuItem, q,idProyecto);
                }


            }

          

        }
        public void loadMenuAlmacen(int idObra,int idAlmacen)
        {
            var q = from a in DbUtil.Db.Menus
                    where a.idAplicacion == 7
                     & a.habilitado == true
                    select a;

            // mostramos solo el menu al cual tiene acceso

            foreach (var item in q)
            {

                //esta condicion indica q son elementos padre.

                if (item.idInternal.Equals(item.idpadre))
                {

                    MenuItem mnuItem = new MenuItem();
                    mnuItem.Value = item.idInternal.ToString();
                    mnuItem.Text = item.descripcion;
                    mnuItem.ImageUrl = item.icono;
                    mnuItem.NavigateUrl = item.url + "?idObra={0}&idAlmacen={1}".Fmt(idObra,idAlmacen);
                    // 'agregamos el Ítem al menú
                    opcionesMenu.Items.Add(mnuItem);
                    //'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.

                    AddMenuItemAlmacen(mnuItem, q, idObra,idAlmacen);
                }


            }



        }
        private void AddMenuItemAlmacen(MenuItem mnuMenuItem,
                                                IQueryable<DAL.Menu> menuList, int idObra,int idAlmacen)
        {

            foreach (var item in menuList)
            {
                if ((item.idpadre.ToString().Equals(mnuMenuItem.Value)) &&
                     (item.idInternal != item.idpadre))
                {
                    MenuItem mnuNewMenuitem = new MenuItem();

                    mnuNewMenuitem.Value = item.idInternal.ToString();
                    mnuNewMenuitem.Text = item.descripcion;
                    mnuNewMenuitem.ImageUrl = item.icono;
                    mnuNewMenuitem.NavigateUrl = item.url + "?idObra={0}&idAlmacen={1}".Fmt(idObra, idAlmacen);
                    //'Agregamos el Nuevo MenuItem al MenuItem que viene de un nivel superior.
                    mnuMenuItem.ChildItems.Add(mnuNewMenuitem);

                    //'llamada recursiva para ver si el nuevo menú ítem aun tiene elementos hijos.
                    AddMenuItemAlmacen(mnuNewMenuitem, menuList, idObra, idAlmacen);

                }


            }



        }
        private void AddMenuItemVenta(MenuItem mnuMenuItem,
                                                 IQueryable<DAL.Menu> menuList,int idProyecto)
        {

            foreach (var item in menuList)
            {
                if ((item.idpadre.ToString().Equals(mnuMenuItem.Value)) &&
                     (item.idInternal != item.idpadre))
                {
                    MenuItem mnuNewMenuitem = new MenuItem();

                    mnuNewMenuitem.Value = item.idInternal.ToString();
                    mnuNewMenuitem.Text = item.descripcion;
                    mnuNewMenuitem.ImageUrl = item.icono;
                    mnuNewMenuitem.NavigateUrl = item.url + "?idProyecto={0}".Fmt(idProyecto);
                    //'Agregamos el Nuevo MenuItem al MenuItem que viene de un nivel superior.
                    mnuMenuItem.ChildItems.Add(mnuNewMenuitem);

                    //'llamada recursiva para ver si el nuevo menú ítem aun tiene elementos hijos.
                    AddMenuItemVenta(mnuNewMenuitem, menuList, idProyecto);

                }


            }



        }


        //public void loadMenuAdmin()
        //{

        //    var q = from a in DbUtil.Db.Menus
        //            where a.idAplicacion == 4 // Ventas Mantenimiento
        //            select a;



        //    foreach (var item in q)
        //    {

        //        //esta condicion indica q son elementos padre.

        //        if (item.idInternal.Equals(item.idpadre))
        //        {

        //            MenuItem mnuItem = new MenuItem();
        //            mnuItem.Value = item.idInternal.ToString();
        //            mnuItem.Text = item.descripcion;
        //            mnuItem.ImageUrl = item.icono;
        //            mnuItem.NavigateUrl = item.url;
        //            // 'agregamos el Ítem al menú
        //            opcionesMenu.Items.Add(mnuItem);
        //            //'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.

        //            AddMenuItem(mnuItem, q);
        //        }


        //    }
        //}

      
        public void loadMenuAdmin()
        {

            var q = from a in DbUtil.Db.Menus
                    where a.idAplicacion == 1 // administrador
                     & a.habilitado == true
                    select a;



            foreach (var item in q)
            {

                //esta condicion indica q son elementos padre.

                if (item.idInternal.Equals(item.idpadre))
                {

                    MenuItem mnuItem = new MenuItem();
                    mnuItem.Value = item.idInternal.ToString();
                    mnuItem.Text = item.descripcion;
                    mnuItem.ImageUrl = item.icono;
                    mnuItem.NavigateUrl = item.url;
                    // 'agregamos el Ítem al menú
                    opcionesMenu.Items.Add(mnuItem);
                    //'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.

                    AddMenuItem(mnuItem, q);
                }


            }
        }


        public void loadMenuSeguridad()
        {
            
            var q = from a in DbUtil.Db.Menus
                    where a.idAplicacion == 3 // administrador
                     & a.habilitado == true
                    select a;



            foreach (var item in q)
            {

                //esta condicion indica q son elementos padre.

                if (item.idInternal.Equals(item.idpadre))
                {

                    MenuItem mnuItem = new MenuItem();
                    mnuItem.Value = item.idInternal.ToString();
                    mnuItem.Text = item.descripcion;
                    mnuItem.ImageUrl = item.icono;
                    mnuItem.NavigateUrl = item.url;
                    // 'agregamos el Ítem al menú
                    opcionesMenu.Items.Add(mnuItem);
                    //'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.

                    AddMenuItem(mnuItem, q);
                }


            }
        }



        public void loadMenuMain()
        {

            var q = from a in DbUtil.Db.Menus
                    where a.idAplicacion == 6 // administrador
                     & a.habilitado == true
                    select a;



            foreach (var item in q)
            {

                //esta condicion indica q son elementos padre.

                if (item.idInternal.Equals(item.idpadre))
                {

                    MenuItem mnuItem = new MenuItem();
                    mnuItem.Value = item.idInternal.ToString();
                    mnuItem.Text = item.descripcion;
                    mnuItem.ImageUrl = item.icono;
                    mnuItem.NavigateUrl = item.url;
                    // 'agregamos el Ítem al menú
                    opcionesMenu.Items.Add(mnuItem);
                    //'hacemos un llamado al metodo recursivo encargado de generar el árbol del menú.

                    AddMenuItem(mnuItem, q);
                }


            }
        }



        private void AddMenuItem(MenuItem mnuMenuItem,
                                  IQueryable<DAL.Menu> menuList)
        {

            foreach (var item in menuList)
            {
                if ((item.idpadre.ToString().Equals(mnuMenuItem.Value)) &&
                     (item.idInternal != item.idpadre))
                {
                    MenuItem mnuNewMenuitem = new MenuItem();


                    mnuNewMenuitem.Value = item.idInternal.ToString();
                    mnuNewMenuitem.Text = item.descripcion;
                    mnuNewMenuitem.ImageUrl = item.icono;
                    mnuNewMenuitem.NavigateUrl = item.url;
                    //'Agregamos el Nuevo MenuItem al MenuItem que viene de un nivel superior.
                    mnuMenuItem.ChildItems.Add(mnuNewMenuitem);

                    //'llamada recursiva para ver si el nuevo menú ítem aun tiene elementos hijos.
                    AddMenuItem(mnuNewMenuitem, menuList);

                }


            }



        }
       
    }
}